"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

exports.__esModule = true;
exports.default = void 0;

var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));

var _babelHelperVueJsxMergeProps = _interopRequireDefault(require("@vue/babel-helper-vue-jsx-merge-props"));

var _utils = require("../utils");

var _shared = require("./shared");

var _functional = require("../utils/functional");

var _router = require("../utils/router");

var _icon = _interopRequireDefault(require("../icon"));

var _createNamespace = (0, _utils.createNamespace)('cell'),
    createComponent = _createNamespace[0],
    bem = _createNamespace[1];

function Cell(h, props, slots, ctx) {
    var _slots$extra;

    var icon = props.icon,
        size = props.size,
        title = props.title,
        label = props.label,
        value = props.value,
        isLink = props.isLink;
    var showTitle = slots.title || (0, _utils.isDef)(title);

    function Label() {
        var showLabel = slots.label || (0, _utils.isDef)(label);

        if (showLabel) {
            return h("div", {
                "class": [bem('label'), props.labelClass]
            }, [slots.label ? slots.label() : label]);
        }
    }

    function Title() {
        if (showTitle) {
            return h("div", {
                "class": [bem('title'), props.titleClass],
                "style": props.titleStyle
            }, [slots.title ? slots.title() : h("span", [title]), Label()]);
        }
    }

    function Value() {
        var showValue = slots.default || (0, _utils.isDef)(value);

        if (showValue) {
            return h("div", {
                "class": [bem('value', {
                    alone: !showTitle
                }), props.valueClass]
            }, [slots.default ? slots.default() : h("span", [value])]);
        }
    }

    function LeftIcon() {
        if (slots.icon) {
            return slots.icon();
        }

        if (icon) {
            return h(_icon.default, {
                "class": bem('left-icon'),
                "attrs": {
                    "name": icon
                }
            });
        }
    }

    function RightIcon() {
        var rightIconSlot = slots['right-icon'];

        if (rightIconSlot) {
            return rightIconSlot();
        }

        if (isLink) {
            var arrowDirection = props.arrowDirection;
            return h(_icon.default, {
                "class": bem('right-icon'),
                "attrs": {
                    "name": arrowDirection ? "arrow-" + arrowDirection : 'arrow'
                }
            });
        }
    }

    function onClick(event) {
        (0, _functional.emit)(ctx, 'click', event);
        (0, _router.functionalRoute)(ctx);
    }

    var clickable = isLink || props.clickable;
    var classes = {
        clickable: clickable,
        center: props.center,
        required: props.required,
        borderless: !props.border
    };

    if (size) {
        classes[size] = size;
    }

    return h("div", (0, _babelHelperVueJsxMergeProps.default)([{
        "class": bem(classes),
        "attrs": {
            "role": clickable ? 'button' : null,
            "tabindex": clickable ? 0 : null
        },
        "on": {
            "click": onClick
        }
    }, (0, _functional.inherit)(ctx)]), [LeftIcon(), Title(), Value(), RightIcon(), (_slots$extra = slots.extra) === null || _slots$extra === void 0 ? void 0 : _slots$extra.call(slots)]);
}

Cell.props = (0, _extends2.default)({}, _shared.cellProps, {}, _router.routeProps);

var _default = createComponent(Cell);

exports.default = _default;